9장 이미지 저장 장소 준비하기
S3
EC2 인스턴스에서 스토리지를 제공한다. EBS(Amazon Elastic Block Store)라고 한다.
EBS를 사용하면 다음과 같은 문제가 있다.
- EC2 인스턴스의 OS자체도 관리해야 한다.
- 예측하지 못한 장애 발생 시 대응이 필요한 경우에 대한 준비
- EC2 인스턴스를 사용하지 못할 가능성도 있다.
이런 문제를 해결해줄 수 있는 스토리지 S3(Amazon Simple Storage Service)가 있다.
S3의 작업 범위와 비용
S3도 매니지드 서비스이다. 사용자는 데이터 관리에 집중할 수 있다.
또한 내구성이 99.999..% 에 달해서 데이터를 손상없이 저장할 수 있다.
비용도 EBS의 비용에 5분의1 수준으로 매우 낮다.
성능과 비용 측면에서 압도적으로 좋지만, 외부 스토리지 서비스라는 한계가 있다.
S3와 VPC의 관계
S3는 외부 스토리지이기 때문에 VPC 외부에 위치한다.
S3에 접근하는 방법으로는 2가지를 들 수 있다.
- 인터넷으로부터 직접 접근
- VPC 로부터 접근
VPC 로부터 접근할 때는 S3 버킷에 대한 접근 권한이 필요하다.
- 접근 정책을 가진 IAM 의 역할을 생성하고 EC2에 적용
- 역할에 포함된 정책을 이용해서 S3에 접근
S3에 접근할 수 있는 정책을 가진 사용자를 만들어서 사용자 권한+ 엑세스 키 조합으로 접근할 수도 있지만, 위의 방법을 더 많이 사용.
S3 시스템
버킷은 S3에서 관리하는 데이터를 하나로 모은 단위이다.
버킷 안에 데이터인 객체로 저장한다.
여러 객체를 폴더로 묶어서 시스템적으로 관리할 수도 있다.
버킷 생성하기
S3 -> 버킷 -> 생성
이 S3는 인터넷으로부터 접근이 아닌 VPC로부터 접근만 허용할 것 이기 때문에 퍼블릭 엑세스를 차단해줬다.
역할 생성해서 EC2에 적용하기
역할 생성
IAM -> 역할 -> 생성
엔티티와 사용사례
AWS서비스와 EC2 선택
권한 추가
모든 S3의 권한 정책인 AmazonS3FullAccess
를 추가해준다.
이후 이름을 지정하고, 할당된 엑세스 권한 정책을 확인한 후 생성해준다.
AmazonS3FullAccess 정책
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": ["s3:*", "s3-object-lambda:*"],
"Resource": "*"
}
]
}
- effect : 설정의 허가 여부
- action : S3에 대한 모든 조작을 의미
- resource: 대상 S3 패킷
Resource에 특정 S3 패킷을 지정하는 정책을 생성하면 된다.
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": ["s3:*", "s3-object-lambda:*"],
"Resource": [
"arn:aws:s3:::my-bucket", // 대상 S3 버킷
"arn:aws:s3:::my-bucket/*" // 대상 S3 버킷의 모든 객체
]
}
]
}
EC2에 역할 적용하기
EC2 -> 인스턴스 -> 작업 -> 보안 -> IAM 역할 수정
생성한 IAM 역할을 적용하여 업데이트 해준다.
작동 확인하기
연결한 EC2 에 간단한 text파일을 만들어서 S3에 업로드하여 작동을 확인해보자.
aws s3 cp text.txt s3://{버킷이름}
S3 대시보드에서 업로드된 객체를 확인할 수 있다.